版本及存储引擎

本文介绍云数据库MongoDB支持的版本、引擎及版本和引擎之间的适配关系,帮助您选择适合您的业务需求的实例。

支持版本

云数据库MongoDB支持如下版本:

说明

您可以在实例运行期间手动升级数据库版本,但版本升级后不支持降级。详情请参见升级数据库版本

存储引擎

存储引擎

适用场景

说明

WiredTiger

默认存储引擎,适用于大多数业务场景。

基于BTree结构组织数据,相比MongoDB早期的MMAPv1存储引擎性能提升明显,且支持数据压缩,存储成本更低。

RocksDB(已下线)

适用于大量写且少读的场景。

基于LSM tree结构组织数据,针对性优化数据写入,将随机写入转换成了顺序写入,能保证持续高效的数据写入。

TerarkDB(已下线)

适用于多读少写或批量写大量读的场景。

借助TerarkDB的全局压缩技术,在提高压缩率的同时,能大幅提高随机查询的性能。

版本和存储引擎的适配关系

存储引擎

4.4及以上版本

4.2版本

4.0版本

3.4版本

WiredTiger

  • 副本集实例

  • 分片集群实例

  • 副本集实例

  • 分片集群实例

  • Serverless实例

  • 单节点实例

  • 副本集实例

  • 分片集群实例

  • 单节点实例

  • 副本集实例

  • 分片集群实例

RocksDB(已下线)

-

-

-

  • 单节点实例(按量付费)

  • 副本集实例(按量付费)

  • 分片集群实例

TerarkDB(已下线)

-

-

-

分片集群实例

MongoDB 7.0版本说明

新推出可查询加密(Queryable Encryption)、分片元数据一致性校验、采样查询与分析分片键(analyzeShardKey)和自动合并(AutoMerger)功能,并在分片(Sharding)、时序集合(Time-Series Collection)、聚合(Aggregation)和安全性等方面进行了增强优化。

  • 可查询加密

    MongoDB 6.0版本中,可查询加密功能为预览(Preview)版本,该功能在MongoDB 7.0版本中正式发布(Generally Available),更多信息请参见Queryable Encryption

  • 分片元数据一致性校验

    MongoDB7.0版本中新增了checkMetadataConsistency命令,以检查不同分片中元数据不一致的情况。您可以在日常运维中增加该巡检项,尽早发现可能不一致的风险。更多信息请参见checkMetadataConsistency

  • 采样查询与分析分片键

    支持基于采样查询(Sampled queries)的结果来分析集合的分片键是否合理,可以帮助您更好地设计Schema以及分片键、更合理使用分片架构。更多信息请参见analyShardKeyconfigureQueryAnalyzer

  • 自动合并

    MongoDB 7.0为自动均衡器(Balancer)实现了一个新的自动合并器(AutoMerger),当数据或索引分布不均衡、存在过多分片或进行数据迁移时,自动合并器会合并Chunks,以均衡数据并提高性能。MongoDB 7.0默认开启该功能,您也可以通过Balancer活动窗口的控制该功能。

  • 分片

    • 支持通过参数rangeDeleterHighPriority设置删除孤儿文档是否具备更高的优先级。通常业务的删除往往具有更高的优先级, 所以该参数默认为false

    • 不再支持用于记录目录缓存刷新行为的operationsBlockedByRefresh监控指标,原因为基于mongos每个利用集合路由信息的操作都会增加该计数器的次数。

    • 新增关于Resharding的监控指标。

    • addShard命令不再支持maxSize选项。

    • 调整config.settings集合的chunksize时,增加了合理性校验,将值限制在[1,1024]。

    • MongoDB6.0.3版本后对Balancer策略进行若干调整:

      • Balancer不再依据分片间Chunks数量的差异,而是依据分片间数据量的差异进行均衡。

      • Chunk的逻辑概念转为Range。

      • 自动分裂(auto-splitting)只会在跨分片移动时发生。

  • 时序集合

    • 移除了之前版本对于时序集合DELETE命令的操作限制。除了不能在多文档事务中使用相关删除命令外,当前DELETE命令再无其他限制。

    • COMPACT命令支持时序集合。

  • 聚合

    新增了以下操作符,支持位计算和百分位数:

    字段名

    描述

    $bitAnd

    返回IntLong类型数值的按位与运算的结果。

    $bitNot

    返回IntLong类型数值的按位取反运算结果。

    $bitOr

    返回IntLong类型数值的按位或运算的结果。

    $bitXor

    返回IntLong类型数值的按位异或运算的结果。

    $median

    返回近似中位数,相当于50百分位数。

    $percentile

    返回指定的百分位数。

  • 安全性

    • 支持KMIP 1.01.1。

    • 支持OpenSSL 3.0以及OpenSSL FIPS。

  • 其他优化

    • 慢日志新增了catalogCacheIndexLookupDurationMillis等字段,更多信息请参见log messages for slow queries

    • 支持动态调整存储引擎事务并发度,之前默认是128,从MongoDB 7.0起,MongoDB会自动动态调整该并发度,更多信息请参见Concurrent Storage Engine Transactions

    • currentOp新增了关于query sampling的全新字段,更多信息请参见currentop-metrics

    • 支持复合通配符索引,更多信息请参见Compound Wildcard Indexes

    • 新增$changeStreamSplitLargeEvent算子支持对超过16 MB的超大变更事件(change events)进行切分,更多信息请参见Large Change Stream Events

    • 优化基于Slot查询执行引擎的性能。

    • 新增Chunk迁移的指标,更多信息请参见New Sharding Statistics for Chunk Migrations

    • 支持通过USER_ROLES系统变量来获取当前User的角色。

    • 新增analyzeShardKeybalancerqueryAnalyzers相关的全局参数。

    • serverStatus的返回结果新增更多字段,更多信息请参见serverStatus Output Change

MongoDB 6.0版本说明

新推出可查询加密(Queryable Encryption)和集群同步(Cluster-to-Cluster Sync)功能,并在时序集合(Time Series Collection)、变更流(Change Streams)、聚合(Aggregation)、查询(Query)、弹性和安全性方面进行了增强优化。

  • 可查询加密

    允许用户从客户端加密敏感数据,将其作为完全随机的加密数据存储在数据库服务器端,并对加密数据进行丰富的查询。

    可查询加密只允许在客户端查看敏感数据的明文,在查询到达服务器端时会同时包含从KMS获取的加密密钥,然后在服务器端以密文进行查询并返回,最后在客户端利用密钥解密后以明文呈现。

  • 集群同步

    推出了新的同步工具mongosync,它能支持跨任何环境(包括混合环境、Atlas、本地以及边缘环境)的数据同步(两个MongoDB实例间连续且单向的数据同步)。用户还可以实时控制和监控整个同步过程,按需启动、停止、恢复甚至反转同步。

  • 时序集合

    分别从索引、查询以及排序多个方面增强了时序集合。

    • 引入二级和复合索引,以改善读取性能。

    • 引入针对时空数据的地理位置索引(Geo-Indexing),将地理信息添加到时序数据,有助于更好地分析涉及距离和位置的场景。

      场景示例:跟踪夏日冷链运输车的温度变化情况、监测特定航线上的货运船燃料消耗。

    • 优化对时序数据的last point查询,不再需要扫描整个集合后才能查询到最后一个数据点。

    • 优化对时序数据的排序,通过时间以及元数据字段上的聚簇索引(Clustered Index)和二级索引(Secondary Index)更高效地完成排序操作。

  • 变更流

    推出了如下新特性以及优化项:

    • 支持查看变更前的视图(Pre-image)。

      说明

      MongoDB 6.0之前的版本仅支持查看变更后的视图,从MongoDB 6.0版本开始,支持查看变更前后的视图。前后视图的更多信息,请参见Change Streams with Document Pre- and Post-Images

    • 支持createcreateIndexesmodifyshardCollectionDDL语句,更多信息,请参见Change Events

    • Change Events新增wallTime字段,时间戳支持多种转换和展示算子(包括$toDate$tsSecondstsIncrement)以方便业务消费。

  • 聚合

    推出了如下新特性以及优化项:

    • 分片集群实例支持$lookup$graphLookup

    • 改进$lookupJOINS的支持。

    • 改进$graphLookup对图遍历的支持。

    • 提升$lookup性能,部分场景中性能提升可达百倍。

    说明

    $lookup$graphLookup的更多信息,请参见$lookup (aggregation)$graphLookup (aggregation)

  • 查询

    新增$maxN$topN$minN$bottomN$lastN$sortArray等操作符。通过操作符可以将更多的计算从业务层下沉到数据库中,使得业务层更加轻量化。

    说明

    操作符的更多信息,请参见Aggregation Pipeline Operators

  • 弹性

    推出了如下新特性以及优化项:

    • 将数据块(Chunk)规格的默认值从64 MB调整为128 MB,有效降低了数据迁移频率以及网络和路由层的开销。

    • 支持configureCollectionBalancing命令,此命令支持的功能如下:

      • 支持为不同的分片表设置不同的数据块规格。

        示例:数据规模特别大的分片表,将数据块规格调整到256 MB。数据规模相对较小但希望在分片上分布更均匀的分片表,将数据块规格调整到64 MB32 MB。

      • 支持主动对集合进行碎片整理。

        相较于compact命令,configureCollectionBalancing命令提供了更好的碎片整理服务,有效降低了磁盘空间占用率。

      说明

      configureCollectionBalancing命令的更多信息,请参见configureCollectionBalancing

    • 安全性

      对客户端字段级加密(CSFLE, Client-Side Field-Level Encryption)功能进行了优化。CSFLE将支持任何符合密钥管理互通协议(KMIP,Key Management Interoperability Protocol)的密钥管理提供商,即除了基于KeyFile的本地密钥管理外,MongoDB支持通过KMIP与第三方密钥管理设备集成,为用户提供更安全的保障。

      说明

      客户端字段级加密功能被广泛应用于敏感数据的管理中,尤其是数据迁移的场景。

MongoDB 5.0版本说明

标志着一个新的发布周期的到来,以更快地交付新特性给到用户。

  • 原生时间序列平台

    通过原生支持整个时间序列数据的生命周期(从采集、存储、查询、实时分析和可视化,到在线归档或随着数据老化自动失效),使构建和运行时间序列应用程序的速度更快、成本更低。随着MongoDB 5.0的发布,MongoDB扩展了通用的应用数据平台,使开发能够更容易地处理时间序列数据,进一步扩展其在物联网、金融分析、物流等方面的应用场景。

  • 在线重新分片

    您可以在业务运行(数据不断增长)的情况下,按需改变集合的分片键(Shard key),而不需要数据库停机或在数据集合中进行复杂的迁移。您只需要在MongoDB Shell中运行reshardCollection命令,选择您需要重新分片的数据库和集合,指定新的分片键即可。

    reshardCollection: "<database>.<collection>", key: <shardkey>
    说明
    • <database>:需要重新分片的数据库名称。

    • <collection>:需要重新分片的集合名称。

    • <shardkey>:分片键的名称。

    • 当您调用reshardCollection命令时,MongoDB会克隆现有集合,然后将现有集合中所有oplog应用到新集合中,当所有oplog被使用后,MongoDB会自动切换到新集合,并在后台删除旧集合。

  • 版本化API

    版本化API支持MongoDB灵活地在每个版本中为数据库添加新的功能和改进内容(以新版本兼容早期版本的方式)。当您需要改变API时,可以增加新版本的API,并与现有版本化的API在同一台服务器上同时运行。随着MongoDB版本发布的加速,版本化API能够使您更快、更轻松地使用到MongoDB最新版本的功能特性。

    版本化API定义了应用程序最常用的一组命令和参数(无论是数据库在年度重大发布还是季度快速发布期间,这些命令均不会改变)。通过将应用程序生命周期和数据库生命周期解耦,您可以将驱动程序固定在MongoDB API的特定版本上,即使数据库发生升级和改进,您的应用程序将可以继续运行数年而不需要修改代码。

  • Write Concern默认Majority级别

    MongoDB 5.0开始,Write Concern默认级别为majority,仅当写入操作被应用到Primary节点(主节点)且被持久化到大多数副本节点的日志中的时候,才会提交并返回成功,“开箱即用”地提供了更强的数据可靠性保障。

  • 长时间运行的快照查询

    长时间运行的快照查询(Long-Running Snapshot Queries)增加了应用程序的通用性和弹性。您可以通过该功能运行默认时间为5分钟的查询(或将其调整为自定义持续时间),同时保持与实时事务性数据库一致的快照隔离,也可以在Secondary节点(从节点)上进行快照查询,从而在单个集群中运行不同的工作负载,并将其扩展到不同的分片上。

  • 新版MongoDB Shell

    为了提供更好的用户体验,MongoDB 5.0从头开始重新设计了MongoDB Shell(mongosh),以提供一个更现代化的命令行体验,以及增强可用性的功能和强大的脚本环境。新版MongoDB Shell已经成为MongoDB平台的默认Shell。新版MongoDB Shell引入了语法高亮、智能自动完成、上下文帮助和有用的错误信息,为您创造一个直观、互动的体验。

  • 版本发布调整

    MongoDB 5.0开始,MongoDB发布的版本将分为Major Release(大版本)和Rapid Releases(快速发布版本),其中Rapid Releases作为开发版本提供下载和测试体验,但不建议用在生产环境。

MongoDB 4.4版本说明

针对之前版本中用户呼声最高的痛点重点进行了改进。

  • Hidden Indexes

    隐藏现有的索引,保证该索引在后续的查询中不会被使用,用来观察目标低效率索引的删除是否会导致业务性能抖动,如不造成影响即可放心删除该低效率索引。

  • Refinable Shard Keys

    增加一个或多个Suffix Field来改善现有的文档在Chunk上的分布问题,避免所有访问集中在某个单一分片上,分散服务器的压力。

  • Compound Hashed Shard Keys

    支持在复合索引中指定单个哈希字段,在极大程度上简化业务逻辑的复杂性。

  • Hedged Reads

    在分片集群实例下,支持将一个读请求同时发送给某个分片中的两个副本集成员,并选择响应最快的返回结果来恢复客户端,以实现降低请求延迟的目的。

  • Streaming Replication

    主库Oplog主动流向备库,相比之前版本的备库轮询方式,节省了近一半的往返时间,提升了主备复制的性能。

  • Simultaneous Indexing

    主库与备库的索引创建操作同步进行,大幅减少主备库在索引创建过程中产生的延迟,保证备库能及时访问到最新的数据。

  • Mirrored Reads

    主节点会按一定的比例把读流量复制到备库上执行,保证从节点承载一定的读流量,缓解业务的访问延迟。

  • Resumable Initial Sync

    在主备库全量同步过程中,提供断点续传功能,避免因网络断连而导致全量同步工作从头进行。

  • Time-Based Oplog Retention

    支持自定义指定Oplog的保留时长,避免主库Oplog被清理触发全量同步。

  • Union

    新增$unionWith stage用于实现类似于SQLunion all功能,增强了MongoDB的查询能力。

  • Custom Aggregation Expressions

    新增$accumulator$function用来实现自定义的Aggregation Expression,完善接口统一性和用户体验。

说明

更多MongoDB 4.4版本的新功能,请参见MongoDB 4.4功能概览

MongoDB 4.2版本说明

采用二段提交方式,保证分片集群事务的ACID特性,极大拓展了适用的业务场景。

  • 分布式事务

    采用二段提交方式,保证分片集群事务的ACID特性,极大拓展了MongoDB的业务场景,实现从NoSQLNewSQL的飞跃。

  • 可重试读

    增加可重试读功能,提供弱网环境下自动重试能力,降低业务端的逻辑复杂性,保证用户业务的连续性。

  • 通配符索引

    对于非确定字段,支持创建通配符索引覆盖一个文档下的多个特征字段,管理方便且使用灵活。

  • 字段级加密

    驱动层面支持字段级加密,可以针对特定的敏感信息(例如账号、密码、价格、手机号等)单独加密。避免全库加密,提升业务灵活性和安全性。

  • 物化视图

    通过最新的物化视图可以缓存计算结果,避免重复计算提升运行效率,减少逻辑复杂度。

MongoDB 4.0版本说明

更适用于金融等对事务有依赖且使用NoSQL特性的场景。

  • 跨文档事务支持

    首个支持跨文档事务的NoSQL云数据库,将文档模型的速度,灵活性、功能与ACID保证相结合。

  • 迁移速度提升40%

    并发的读取和写入,使得新增的Shard节点能更快地完成数据迁移以承载业务压力。

  • 读性能大幅扩展

    借助事务特性,Secondary节点不再因为同步日志而阻塞读取请求。 阿里云同时在全体系版本支持多节点扩展功能,可大幅提升业务读取能力。

MongoDB 3.4版本说明

在性能和安全性等方面较3.2版本均有不同程度的提升。

说明

MongoDB 3.2版本已下线,详情请参见【通知】1122日云数据库MongoDB3.2版本下线

  • 更快的主备同步

    在同步数据的同时建立所有索引(以前的版本仅建立_id索引)。同时在同步数据的阶段,Secondary节点不断读取新的oplog信息,确保Secondary节点的local数据库具备足够的存储空间来存储临时数据。

  • 更高效的负载均衡

    3.2及以前版本中,分片集群的负载均衡由Mongos节点负责,多个Mongos节点会抢一个分布式锁,由抢锁成功的Mongos节点执行负载均衡任务,在Shard节点间迁移块;而在3.4版本中,负载均衡由ConfigServer节点中的Primary节点负责,负载均衡的并发度和效率上均有大幅提升。

  • 更丰富的aggregation操作

    3.4版本增加了大量的aggregation操作符,可支持更强的数据分析能力。例如,bucket能便捷地对数据进行分类;$grahpLookup相较于3.2版本的$lookup能支持更复杂的关系运算;$addFields使得文档操作更丰富(例如将某些字段求和存储为新的字段)。

  • 支持Sharding Zones

    分片集群里引入了Zone的概念,主要取代现在的tag-aware sharding机制,能将某些数据分配到指定的一个或多个Shard节点中,该特性极大地方便sharding cluster的跨机房部署。

  • 支持Collation

    在之前的版本里,文档里存储的字符串不论是中英文还是大小写,一律按字节来对比;引入Collation后,支持对字符串的内容进行解读,可以按使用的locale进行对比,也支持在对比时忽略大小写。

  • 支持只读视图(Read-only views)

    3.4中增加了对只读视图的支持,可以将集合中满足某个查询条件的数据虚拟成一个特殊的集合,用户可以在特殊的集合上做进一步的查询操作。